RDS for Oracle (12.2以降) のリスナーログに関する注意点
こんにちは。オペレーション部の西澤です。
オンプレでログの内容を確認する時は、DBサーバーにログインしてOSコマンドでみたり、ローカル環境にダウンロードしたりすると思います。 しかし、RDSではこれらの方法が使えません。RDSを初めて操作する時、この違いに驚かれる方も多いのではないでしょうか。(私はそうでした)
今回は、その中でもRDS for Oracle (12.2以降)のリスナーログにおける注意点について書いてみます。
listenerlogビューから確認する方法
インターネットで雑に検索(例:rds oracle リスナーログ)すると、ドキュメント以外ではだいたいこの方法がヒットします。 確かに、listenerlogビューのmessage_text列をselectすることでリスナーログの内容は確認できます。 ただ、message_text列のタイムスタンプがUTCで見づらかったり、SQL*Plusから検索する必要があるなど、面倒な点が多いと思います。
SQL> select message_text from listenerlog; MESSAGE_TEXT -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 29-NOV-2020 03:17:40 * service_register * ORCL * 0 29-NOV-2020 03:17:41 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0 29-NOV-2020 03:17:47 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0 29-NOV-2020 03:17:56 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0 29-NOV-2020 03:17:57 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0 29-NOV-2020 03:17:59 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0 29-NOV-2020 03:17:59 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0 29-NOV-2020 03:18:00 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0 29-NOV-2020 03:18:01 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=rdshm))(SID=ORCL)(SERVER=DEDICATED)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxxxxxxx)(PORT=yyyyy)) * establish * ORCL * 0 :
しかし、この方法は12.2以降で使えません。ドキュメントをみてみましょう。
Oracle Database バージョン 12.2.0.1 以降の場合は、Amazon CloudWatch Logs を使用してリスナーログにアクセスします。
なお、AWSからアナウンスされている通り、11.2.0.4のサポート終了によって、Databaseのアップグレードを検討しているシステムは多いかと思います。そのため、12.2より前のバージョンをお使いで、かつlistenerlogビューを確認されていた方はこの点にご注意ください。
Amazon RDS for Oracle バージョン 12.2.0.1と11.2.0.4のサポート終了のお知らせ | Amazon Web Services ブログ
[補足]
12.2以降でもlistenerlogビュー自体は残っています。selectも可能ですが、中身は空です。
SQL> select version from v$instance; VERSION ----------------- 19.0.0.0.0 SQL> select count(*) from listenerlog; COUNT(*) ---------- 0
CloudWatch Logsから確認する方法
現在、CloudWatch Logsから確認できるログはリスナーログを含め、アラートとトレース、監査の4種類です。 設定方法については、下記ブログで詳細に説明されていますので、こちらをご覧ください。
[新機能] RDS for Oracle が CloudWatch Logs へのログ出力をサポートしました | Developers.IO
なお、Databaseの作成時、「ログのエクスポート」はデフォルトでチェックが入っていないのでご注意ください。※Database作成後の変更は可能です。
以上です。